package com.cyzy.controller;

import com.cyzy.dto.OrderCreateDto;
import com.cyzy.dto.Result;
import com.cyzy.service.ScoreOrderService;
import com.cyzy.utils.OrderUtils;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.*;

@Slf4j
@RestController
@RequestMapping("/score-order")
public class ScoreOrderController {
    
    @Autowired
    private ScoreOrderService scoreOrderService;
    
    /**
     * 创建积分商品订单
     * @param orderCreateDto 订单创建信息
     * @return 创建结果
     */
    @PostMapping("/create")
    public Result createScoreOrder(@RequestBody OrderCreateDto orderCreateDto) {
        log.info("收到创建积分订单请求：{}", orderCreateDto);
        
        // 参数校验
        if (orderCreateDto == null) {
            return Result.error().message("订单信息不能为空");
        }
        
        // 如果订单号为空，自动生成
        if (orderCreateDto.getOrder_num() == null || orderCreateDto.getOrder_num().trim().isEmpty()) {
            orderCreateDto.setOrder_num(OrderUtils.generateScoreOrderNum());
            log.info("自动生成订单号：{}", orderCreateDto.getOrder_num());
        }
        
        if (orderCreateDto.getUser_id() == null) {
            return Result.error().message("用户ID不能为空");
        }
        
        // 设置订单类型为积分
        if (orderCreateDto.getOrder_type() == null || orderCreateDto.getOrder_type().trim().isEmpty()) {
            orderCreateDto.setOrder_type("积分");
        }
        
        if (orderCreateDto.getRelated_id() == null) {
            return Result.error().message("关联商品ID不能为空");
        }
        
        if (orderCreateDto.getOrder_amount() == null || orderCreateDto.getOrder_amount() <= 0) {
            return Result.error().message("订单金额必须大于0");
        }
        
        // 如果订单数量为空，默认设置为1
        if (orderCreateDto.getOrder_quantity() == null) {
            orderCreateDto.setOrder_quantity(1);
        }
        
        // 调用服务层创建订单
        return scoreOrderService.createScoreOrder(orderCreateDto);
    }
    
    /**
     * 生成订单号（供前端调用）
     * @return 新的订单号
     */
    @GetMapping("/generateOrderNum")
    public Result generateOrderNum() {
        String orderNum = OrderUtils.generateScoreOrderNum();
        return Result.ok().data("orderNum", orderNum).message("订单号生成成功");
    }
}